﻿using System.Text;

namespace FileTest
{
    class Program
    {
        static void Main(string[] args)
        {

            Test.Do();

        }
    }

    class Test
    {

        public static void Do()
        {
            var path = "D:/Study/1.txt";
            string[] arr =
            {
                "AAA",
                "欧阳",
                "EEE",
            };
            //1. 叠加所有行
            // arr 里面每一项将作为一行叠加到原来的数据之下
            // file : 文件； append:追加 ； all 所有、全部； line ：一行又一行的”行“（hang 二声）
            File.AppendAllLines(path, arr);
            //2. 追加字符串
            File.AppendAllText(path, string.Join(",", arr));

            // 3. 文件的对拷，第一个参数为原始文件，第二个为目标文件
            //  文件如果存在则报错，可以 try 也可以 overwrite （覆盖）
            var copyto = "D:/Study/5.txt";
            File.Copy(path, copyto, true);

            // 4.  文件的创建
            // 如果文件存在则覆盖
            path = "D:/Study/666.txt";
            var fs = File.Create(path);
            var bt = Encoding.UTF8.GetBytes(string.Join(";", arr));
            fs.Write(bt);
            fs.Close();  // 关闭文件流数据才会保存

            //5. 文本文档的创建，默认编码 UTF-8
            // 如果文件存在则覆盖
            path = "D:/Study/888.txt";
            var sw = File.CreateText(path);
            sw.WriteLine(String.Join(";", arr));
            sw.Close();

            //6. 删除文件
            File.Delete(path);

            //加密
            path = "D:/Study/666.txt";
#pragma warning disable CA1416 // 验证平台兼容性
            var str = File.ReadAllText(path);
            Console.WriteLine($"加密前：{str}");

            File.Encrypt(path);

            str = File.ReadAllText(path);
            Console.WriteLine($"加密后：{str}");

            File.Decrypt(path);
#pragma warning restore CA1416 // 验证平台兼容性

            // 7. 查： 文件是否存在
            var b1 = File.Exists("D:/Study/888.txt");
            var b2 = File.Exists("D:/Study/666.txt");
            Console.WriteLine($"{b1} --- {b2}");

            //8. 查：获得文件（夹）属性： 只读、归档、目录
            var gac = File.GetAttributes("D:/Study/666.txt");
            Console.WriteLine($"Attributes = {gac}"); // Archive ：归档，档案文件 
            gac = File.GetAttributes("D:/Study/2.txt");
            Console.WriteLine($"Attributes = {gac}"); //readonly，archive
            gac = File.GetAttributes("D:/Study");
            Console.WriteLine($"Attributes = {gac}"); //Directory

            //9. 查 ： 获得创建时间
            // get:得到； create ：创建，Creation ，Time 时间
            var sj = File.GetCreationTime("D:/Study/666.txt");
            Console.WriteLine($"创建时间 = {sj}"); //Directory

            // 10 改 移动文件
            // sourcefilename = source: 源头，源数据 
            // destFileName = dest :destination 目的地
            // 移动到同一个目录下是重命名的效果
            File.Move("D:/study/666.txt", "D:/study/Folder2/858.txt", true);

            //11. 文件的读取
            // open :打开
            // filemode: mode 模式，文件打开的模式
            // open or  create : 打开或者创建
            File.Open("D:/study/folder2/888.txt", FileMode.OpenOrCreate);

            // 12. 文件读取，返回的是只读的 文件流
            var or = File.OpenRead("D:/STUDY/FOLDER2/858.TXT");
            byte[] bts = new byte[1024 * 1024];
            or.Read(bts);
            //Encoding ：编码 ； UTF8 通用文字编码格式，包含汉字，get string
            str = Encoding.UTF8.GetString(bts);
            Console.WriteLine($"858.txt 里面是：{str}");
            or.Close();

            // 13 . 获取文件全部字节
            //  read 读  
            // readline : 读行
            bts = File.ReadAllBytes("D:/STUDY/FOLDER2/858.TXT");
            Console.WriteLine("858.TXT 读取开始");
            foreach (var item in bts)
            {
                // 输出的是 item 的二进制数值（Ascii）
                Console.WriteLine(item);
            }
            Console.WriteLine("858.TXT 读取结束");

            //14 .输出文件的文本信息，会换行 
            string[] strs = File.ReadAllLines("D:/study/3.txt");
            Console.WriteLine("3.TXT 读取开始");
            foreach (var item in strs)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine("3.TXT 读取结束");

            //15.  读取所有文本
            // text :文本
            string strr = File.ReadAllText("D:/study/3.txt");
            Console.WriteLine($"3.TXT 里面是：{strr}");

            //16.  设置文件属性 
            // file :文件；attribute 属性 a ttri bu te
            //FileAttributes fa = FileAttributes.ReadOnly|FileAttributes.Archive; //添加多个属性使用 | 符号链接
            FileAttributes fa = FileAttributes.ReadOnly;
            File.SetAttributes("D:/study/3.txt", fa);

            // 17. 写入所有的文本
            File.WriteAllText("D:/study/999.txt", "NIHAO!");

            File.WriteAllLines("D:/study/898.txt", arr);

            byte[] btss =  {65,
                59    ,
                230 ,
                172 ,
                167 ,
                233 ,
                152 ,
                179 ,
                59    ,
                69    };
            File.WriteAllBytes("D:/study/858.txt", btss);
        }
    }
}